{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['setosa', 'versicolor', 'virginica'], dtype='<U10')"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import the Iris dataset from scikit-learn\n",
    "from sklearn.datasets import load_iris\n",
    "# import our plotting module\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# load the Iris dataset\n",
    "iris = load_iris()\n",
    "\n",
    "# seperate the features and response variable\n",
    "iris_X, iris_y = iris.data, iris.target\n",
    "\n",
    "# the names of the flower we are trying to predict.\n",
    "iris.target_names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['sepal length (cm)',\n",
       " 'sepal width (cm)',\n",
       " 'petal length (cm)',\n",
       " 'petal width (cm)']"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Names of the features\n",
    "iris.feature_names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# for labelling: {0: 'setosa', 1: 'versicolor', 2: 'virginica'}\n",
    "label_dict = {i: k for i, k in enumerate(iris.target_names)}\n",
    "\n",
    "def plot(X, y, title, x_label, y_label):\n",
    "    ax = plt.subplot(111)\n",
    "    for label,marker,color in zip(\n",
    "    range(3),('^', 's', 'o'),('blue', 'red', 'green')):\n",
    "\n",
    "        plt.scatter(x=X[:,0].real[y == label],\n",
    "            y=X[:,1].real[y == label],\n",
    "            color=color,\n",
    "            alpha=0.5,\n",
    "            label=label_dict[label]\n",
    "            )\n",
    "\n",
    "    plt.xlabel(x_label)\n",
    "    plt.ylabel(y_label)\n",
    "\n",
    "    leg = plt.legend(loc='upper right', fancybox=True)\n",
    "    leg.get_frame().set_alpha(0.5)\n",
    "    plt.title(title)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(iris_X, iris_y, \"Original Iris Data\", \"sepal length (cm)\", \"sepal width (cm)\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[5.84333333 3.05733333 3.758      1.19933333]\n",
      "(4, 4)\n"
     ]
    }
   ],
   "source": [
    "# Calculate a PCA manually\n",
    "\n",
    "# import numpy\n",
    "import numpy as np\n",
    "\n",
    "# calculate the mean vector\n",
    "mean_vector = iris_X.mean(axis=0)\n",
    "print(mean_vector)\n",
    "\n",
    "# calculate the covariance matrix\n",
    "cov_mat = np.cov((iris_X).T)\n",
    "print(cov_mat.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.68569351, -0.042434  ,  1.27431544,  0.51627069],\n",
       "       [-0.042434  ,  0.18997942, -0.32965638, -0.12163937],\n",
       "       [ 1.27431544, -0.32965638,  3.11627785,  1.2956094 ],\n",
       "       [ 0.51627069, -0.12163937,  1.2956094 ,  0.58100626]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cov_mat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Eigenvector 1: \n",
      "[ 0.36138659 -0.08452251  0.85667061  0.3582892 ]\n",
      "Eigenvalue 1 from covariance matrix: 4.228241706034863\n",
      "------------------------------\n",
      "Eigenvector 2: \n",
      "[-0.65658877 -0.73016143  0.17337266  0.07548102]\n",
      "Eigenvalue 2 from covariance matrix: 0.24267074792863352\n",
      "------------------------------\n",
      "Eigenvector 3: \n",
      "[-0.58202985  0.59791083  0.07623608  0.54583143]\n",
      "Eigenvalue 3 from covariance matrix: 0.07820950004291925\n",
      "------------------------------\n",
      "Eigenvector 4: \n",
      "[ 0.31548719 -0.3197231  -0.47983899  0.75365743]\n",
      "Eigenvalue 4 from covariance matrix: 0.023835092973449115\n",
      "------------------------------\n"
     ]
    }
   ],
   "source": [
    "# calculate the eigenvectors and eigenvalues of our covariance matrix of the iris dataset\n",
    "eig_val_cov, eig_vec_cov = np.linalg.eig(cov_mat)\n",
    "\n",
    "# Print the eigen vectors and corresponding eigenvalues\n",
    "# in order of descending eigenvalues\n",
    "for i in range(len(eig_val_cov)):\n",
    "    eigvec_cov = eig_vec_cov[:,i]\n",
    "    print('Eigenvector {}: \\n{}'.format(i+1, eigvec_cov))\n",
    "    print('Eigenvalue {} from covariance matrix: {}'.format(i+1, eig_val_cov[i]))\n",
    "    print(30 * '-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.92461872, 0.05306648, 0.01710261, 0.00521218])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# the percentages of the variance captured by each eigenvalue\n",
    "# is equal to the eigenvalue of that components divided by\n",
    "# the sum of all eigen values\n",
    "explained_variance_ratio = eig_val_cov/eig_val_cov.sum()\n",
    "explained_variance_ratio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, '% of Variance Explained <= k')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Scree Plot\n",
    "\n",
    "plt.plot(np.cumsum(explained_variance_ratio))\n",
    "plt.title('Scree Plot')\n",
    "plt.xlabel('Principal Component (k)')\n",
    "plt.ylabel('% of Variance Explained <= k')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.36138659, -0.08452251,  0.85667061,  0.3582892 ],\n",
       "       [-0.65658877, -0.73016143,  0.17337266,  0.07548102]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# store the top two eigenvectors in a variable\n",
    "top_2_eigenvectors = eig_vec_cov[:,:2].T\n",
    "\n",
    "# show the transpose so that each row is a principal component, we have two rows == two components\n",
    "top_2_eigenvectors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2.81823951, -5.64634982],\n",
       "       [ 2.78822345, -5.14995135],\n",
       "       [ 2.61337456, -5.18200315],\n",
       "       [ 2.75702228, -5.0086536 ],\n",
       "       [ 2.7736486 , -5.65370709]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# to transform our data from having shape (150, 4) to (150, 2)\n",
    "# we will multiply the matrices of our data and our eigen vectors together\n",
    "# notice how I am centering the data first. I am doing this to replicate how scikit-learn PCA's algorithm functions\n",
    "np.dot(iris_X, top_2_eigenvectors.T)[:5,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.36138659, -0.08452251,  0.85667061,  0.3582892 ],\n",
       "       [ 0.65658877,  0.73016143, -0.17337266, -0.07548102]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# scikit-learn's version of PCA\n",
    "from sklearn.decomposition import PCA\n",
    "\n",
    "# Like any other sklearn module, we first instantiate the class\n",
    "pca = PCA(n_components=2)\n",
    "\n",
    "# fit the PCA to our data\n",
    "pca.fit(iris_X)\n",
    "\n",
    "pca.components_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2.68412563,  0.31939725],\n",
       "       [-2.71414169, -0.17700123],\n",
       "       [-2.88899057, -0.14494943],\n",
       "       [-2.74534286, -0.31829898],\n",
       "       [-2.72871654,  0.32675451]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# sklearn PCA centers the data first while transforming, so these numbers won't match our manual process.\n",
    "pca.transform(iris_X)[:5,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2.68412563, -0.31939725],\n",
       "       [-2.71414169,  0.17700123],\n",
       "       [-2.88899057,  0.14494943],\n",
       "       [-2.74534286,  0.31829898],\n",
       "       [-2.72871654, -0.32675451]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# manually centering our data to match scikit-learn's implementation of PCA\n",
    "np.dot(iris_X-mean_vector, top_2_eigenvectors.T)[:5,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the original and projected data\n",
    "plot(iris_X, iris_y, \"Original Iris Data\", \"sepal length (cm)\", \"sepal width (cm)\")\n",
    "plt.show()\n",
    "plot(pca.transform(iris_X), iris_y, \"Iris: Data projected onto first two PCA components\", \"PCA1\", \"PCA2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.92461872, 0.05306648])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# percentage of variance in data explained by each component\n",
    "# same as what we calculated earlier\n",
    "\n",
    "pca.explained_variance_ratio_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.        , -0.11756978,  0.87175378,  0.81794113],\n",
       "       [-0.11756978,  1.        , -0.4284401 , -0.36612593],\n",
       "       [ 0.87175378, -0.4284401 ,  1.        ,  0.96286543],\n",
       "       [ 0.81794113, -0.36612593,  0.96286543,  1.        ]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# show how pca attempts to eliminate dependence between columns\n",
    "\n",
    "# capture all four principal components\n",
    "full_pca = PCA(n_components=4)\n",
    "\n",
    "# fit our PCA to the iris dataset\n",
    "full_pca.fit(iris_X)\n",
    "\n",
    "# show the correlation matrix of the original dataset\n",
    "np.corrcoef(iris_X.T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.11756978,  0.87175378,  0.81794113, -0.4284401 , -0.36612593])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# correlation coefficients above the diagonal\n",
    "np.corrcoef(iris_X.T)[[0, 0, 0, 1, 1], [1, 2, 3, 2, 3]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.15551181623163574"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# average correlation of original iris dataset.\n",
    "np.corrcoef(iris_X.T)[[0, 0, 0, 1, 1], [1, 2, 3, 2, 3]].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.076424409808897e-16"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca_iris = full_pca.transform(iris_X)\n",
    "# average correlation of PCAed iris dataset.\n",
    "np.corrcoef(pca_iris.T)[[0, 0, 0, 1, 1], [1, 2, 3, 2, 3]].mean()\n",
    "# VERY close to 0 because columns are independent from one another\n",
    "# This is an important consequence of performing an eigen value decomposition"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.74333333,  0.44266667, -2.358     , -0.99933333],\n",
       "       [-0.94333333, -0.05733333, -2.358     , -0.99933333],\n",
       "       [-1.14333333,  0.14266667, -2.458     , -0.99933333],\n",
       "       [-1.24333333,  0.04266667, -2.258     , -0.99933333],\n",
       "       [-0.84333333,  0.54266667, -2.358     , -0.99933333]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import our scaling module\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "# center our data, not a full scaling\n",
    "X_centered = StandardScaler(with_std=False).fit_transform(iris_X)\n",
    "\n",
    "X_centered[:5,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot our centered data\n",
    "plot(X_centered, iris_y, \"Iris: Data Centered\", \"sepal length (cm)\", \"sepal width (cm)\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,\n",
       "    svd_solver='auto', tol=0.0, whiten=False)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fit our PCA (with n_components still set to 2) on our centered data\n",
    "pca.fit(X_centered)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.36138659, -0.08452251,  0.85667061,  0.3582892 ],\n",
       "       [ 0.65658877,  0.73016143, -0.17337266, -0.07548102]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# same components as before\n",
    "pca.components_  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2.68412563,  0.31939725],\n",
       "       [-2.71414169, -0.17700123],\n",
       "       [-2.88899057, -0.14494943],\n",
       "       [-2.74534286, -0.31829898],\n",
       "       [-2.72871654,  0.32675451]])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# same projection when data are centered because PCA does this automatically\n",
    "pca.transform(X_centered)[:5,]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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q1atYvny5QB8/PHHfP3rX+ejjz5i//797Ny5k3Xr1rF27Vquu+66bsduaWmh8qZKbv7xzTz68qMsfmwx+a58XnniFVraW1i7di1PPPEE3/jGN45JivyTn/yEyZMnU11dzd13383Xv/71znWrVq3ihRde6HNKDVSxJYyKCvt8eTzQ0dE1XVGRbMkUJcOIg91/8uTJ7N27l127drFmzRrcbjfV1dW89tprTJ48mSlTprBp0yY+/fRTAEaPHs20adMAOOGEE9iyZQs333wzr7zyCoWFhd2O/fHHHzN02FDGTBgDQP+B/cnOyWbN+2u4ZO4lAJSVlTF69Gg++eSTbvv+/e9/55prrgHgi1/8IgcOHKDeeYO+9NJLKSgo6PFvTmdUsSUIb5ostxt27LDfmvtRUeJAnMpjzJ07l2eeeYannnqKefPmYYzhBz/4QWfpms2bN7PAybTcv3//zv3cbjdr1qxh5syZ/OY3v+H666/vdlxjDP1z+9PU1kRja2NniZv2jnZGF40OKVOgXL8icowMfQ1VbAmkvBwqK+HWW+38vffaeY2MVJQYEie7/7x583jyySd55plnmDt3LhdeeCFLliyhoaEBgJ07d7J3795j9tu/fz8dHR1cccUV/PznP+fDDz/str6srIx9tfso2FtAQW4BtQdryZM8Lp51MS9VvQTAJ598Qk1NDSeddFK3fWfMmMHjjz8O2GjJoUOHHtMj7Ito8EiC0erYihJn4lG3BpgwYQKHDx9m5MiRlJSUUFJSwsaNG5k+fToAAwYM4LHHHiM7O7vbfjt37uS6667rjI7893//927r8/LyeOqpp7j55ptpbGykoKCAN954g7O/czYLFy7k1FNPJScnh6VLl5Kfn99t38rKSq677jrKy8vp16+f1nBz0LI1Caay8thaa975yspkSaUoqU20ZWs0G0JotGyNElM07F9REoCWx+jTqI8twWjYv6IoSnxRxZZgNOxfURQlviRVsYnIEhHZKyLrgqwXEblPRDaLSLWITEm0jLFGw/4VRVHiS7J9bEuB+4HfB1k/GxjnfM4CHnC+0xo1/yuKosSPpPbYjDHLgYMhNrkM+L2xvAsMEpGSxEinKIqipCOp7mMbCWz3md/hLOuGiNwgIitFZOW+ffsSJpyiKH2XXbt2MXfu3Kj3u/7669mwYUPIbR588EF+//tghiwlHMk2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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot PCA projection of centered data, same as previous PCA projected data\n",
    "plot(pca.transform(X_centered), iris_y, \"Iris: Data projected onto first two PCA components with centered data\", \"PCA1\", \"PCA2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.92461872, 0.05306648])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# percentage of variance in data explained by each component\n",
    "\n",
    "pca.explained_variance_ratio_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# doing a normal z score scaling\n",
    "X_scaled = StandardScaler().fit_transform(iris_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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lI0HYAJnlRzGhINdAZhAWV/+JtvddtttrFixIunlVq1axcUXX5yGiPpnVwAmUPH9ucChv3V1dhVgokNVUVXy8o78Df3lLw/YnMk3+/fvZ8iQ1E7hdgVgAmV9+ZuU+Nwf9Oc+9zm+973vHXy/cOFClixZwu233860adOoqKhgwYIFAGzbto33ve993HTTTUyZMoVXX32VOXPmMHHiRCZNmnSwxe+cOXOora0FYO3atZx++umceOKJnHLKKbS3t7N7926uueYaJk2axOTJk3n88cePiKupqYmPfOQjVFRUMH36dOrd/Vy4cCE33HAD559/PldddVVK+w6WAEzArC9/M2hpuH84e/Zsli1bdvD9L37xC8aMGcNLL73EM888w4YNG1i/fj2rV68GnB5Ar7rqKp577jnefPNNGhsb2bx5M5s2beKaa67pte69e/fysY99jO9+97ts3LiRFStWUFRUxB133AE4XVD8/Oc/5+qrr2b37t29ll2wYAGTJ0+mvr6er3/9671O9uvXr2f58uX87Gc/G/R+97AEYAJlffmbQUtDf9CTJ0/mjTfeYMeOHWzcuJHS0lLq6+t55JFHmDx5MlOmTOH555/npZdeAuDYY49l+nRn3Kp///d/5x//+Adz587l4YcfJhaL9Vr3Cy+8QFlZGdOmTQMgFosxZMgQ/vKXv3DllVcCTodyxx57LC+++GKvZePnOeecc3jrrbdodX85XXLJJRQVFQ16n+NZAjCBsr78zaCl6f5hZWUltbW1LFu2jNmzZ6Oq3HzzzWzYsIENGzbw8ssvc53b41xxcfHB5UpLS9m4cSNnn302d9xxB9dff32v9aoqInLE9rz0v9bXPD3rio8hVZYATOAqKpzbt/fc4/y1k7/xJE33D2fPns2DDz5IbW0tlZWVXHDBBdxzzz10dDgDFjY2NvLGG28csdybb75Jd3c3l19+OV/5yld49tlne30+fvx4duzYwdq1awFob29n//79nHnmmTzwwAMAvPjiizQ0NPDe976317Lx86xatYqjjjrqiCsMP1gVkOnFavRNaKWpP+gJEybQ3t5OeXk5ZWVllJWVsXXrVk477TQARowYwU9/+lPy8/N7LdfY2Mg111xDd3c3AN/4xjd6fV5YWMiyZcuYO3cuXV1dFBUVsWLFCm666SZuvPFGJk2axJAhQ7j33nsZOnRor2UXLlzINddcQ0VFBcOHD0/b+AEZ6w56MKw76PTqecZWWtr7/5fdojHpkmx30PYLJbFIdAdtwsdq9E3oWX/QvrJnAOYgq9E3JrdYAjAHWY2+MbnFEoA5yGr0jcktlgDMQVajb0xusYfAphd7xmZM7rArAJOVfO4zzOSQHTt2UFlZmfRy119/PX/7298GnOf73/8+P/nJTwYbmu+sHYDJOtaeITqSbgeQQX50vxyEZNoB2BWAyTpp6DPMhET9a/UsXLWQa5dfy8JVC6l/LT3dQU+cOBGAe++9l1mzZvHhD3+Y888/n+7ubm666SYmTJjAxRdfzIc+9KGDXT+fffbZ9PxAHTFiBLfccgsnnngi06dP5/XXXz+4/sVua+aXX36ZGTNmcOKJJzJlyhT+/ve/09HRwbnnnsuUKVOYNGkSy5cvT2n/ErEEYLKOtWfITvWv1bN4zWKau5oZGxtLc1czi9csTikJ9NUddE/vnT3WrFnDfffdx8qVK6mrq2Pbtm1s2rSJu+++mzVr1vS53s7OTqZPn87GjRs588wz+eEPf3jEPFdccQWf/OQn2bhxI0899RRlZWUMGzaMhx56iGeffZbHH3+cefPmeeo8brAsAZisY+0ZslPd83WUDiultKiUPMmjtKiU0mGl1D3vb3fQ4w77opx33nmMHj0acLppnjVrFnl5eRx99NF88IMf7HO9hYWFB4d3PPnkk9m2bVuvz9vb22lsbOSyyy4DYNiwYQwfPhxV5Qtf+AIVFRXMmDGDxsbGg1cP6RD+G1rGJClNfYaZDGtobWBsbGyvaaOGjaKh1Z/uoF977TVmz559xOfx3S97/TVeUFBwsPvm/Px89u/f3+vz/tbzwAMPsGvXLtavX09BQQHHHXfcEYPF+CljVwAi8g4ReVxEtorIFhH5P5mKxWQXa8+QncaNGkfr7t6Xdq27Wxk3yt/uoAdyxhln8Ktf/Yru7m5ef/11Vq1aNahtxmIxxo4dy69//WsA9uzZw7/+9S9aW1t5+9vfTkFBAY8//jivvPLKoNbvVSavAPYD81T1WREZCawXkUdVdeA6KmM8sPYM2Wfm+JksXuNc2o0aNorW3a00727musn+dgd9+O2aeJdffjmPPfYYEydO5Pjjj+fUU09l1OEPnDy6//77+cQnPsFtt91GQUEBv/zlL7niiiv48Ic/zNSpUznppJMYP378IPfKm9CUgYrIcqBGVR/tbx4rA42G2lqoqYHGRigvh6oqGERZtckByZaB1r9WT93zdTS0NjBu1Dhmjp9JxdHBZvqOjg5GjBjBW2+9xSmnnMKTTz7J0UcfHWgMA4lcd9AichwwGXi6j89uAG4Ajng4Y8Knthbmz4dYDMrKoKXFeQ+WBEzqKo6uCPyEf7iLL76YlpYW9u7dyxe/+MVQnfyTlfErABEZATwBfE1VB3ycb1cA4Xf22c5Jv6Tk0LSe94O8XWqyWJQagkVFZBqCiUgB8CvggUQnfxMNjY3Or/94sZgz3Zi+ZPpHaDZJ9lhmsgpIgB8BW1X1W5mKw/irvBza2npPa2tzphtzuIKCAjo6OiwJ+EBV6ejooKCgwPMymXwG8H7gSmCTiGxwp31BVf+QwZhMiqqqDt3zj8Wck39bG9x6a2bjMuE0evRompqaaG9vz3QoWaGgoOBgozUvMpYAVPUvgGRq+yY9eh70xlcB3XqrPQA2fcvPz2fMmDGZDiNnhaIKyGSXyko74RsTBZYAcsySJbB0KTQ1wejRMHcuzJuX6aiSV1/v9O7Z0OD08TNzpjX8MuGRanuFoNo7WGdwOWTJEliwADo7nbLMzk7n/ZIlmY4sOT39/Tc3w9ixzt/Fi23QFxMOqfZamo5eT/tjCSCHLF0KRUVQXOz0k19c7LxfujTTkSXH+vs3YZZqr6Xp6PW0P5YAckhTk3PCj1dU5EyPEuvv34RZQ2sDo4b1/oIm02tpqssnwxJADhk9Grq6ek/r6nKmR4n192/CLNVeS9PV62lfLAHkkLlznRN+Zyd0dzt/u7qc6VEyc6Zz37+52dmPnn/PnJnpyIxxei1t3t1Mc1cz3dpNc1czzbubmTne2xc01eWTkfG+gJJhfQGlzqqAjEm/sFUB9dcXkCUAY4zJcqHuDtoEx49fzonWYb/OjYkGewaQQ/yon0+0DqvRNyY6LAHkED/q5xOtw2r0jYkOSwA5xI/6+UTrsBp9Y6LDEkAO8aN+PtE6rEbfmOiwBJBD/KifT7QOq9E3JjoSloGKyFTgA8AxQBewGVihqoF3IGBloKmzKiBjck/S7QBEZA7wKeCfwHrgDWAYcDzOaF6bgS+qamB3dy0BGGNM8gbTDqAYeL+qdvX1oYicBLwHsMd7xhgTQf0mAFW9Y6AFVXXDQJ/nmiBue9itF5PrghooJVckfAgsIu8UkW+JSJ2I/KbnFURwURFE4ydrgGVyXZADpeQKL11B/Br4EfBboDu94URTfOMnOPS3rs6/X+CJthFEDMZkUvxAKcDBv3XP19lVwCB5SQC7VfV/0x5JhDU0OL+64/nd+CnRNoKIwZhMamhtYGys95c8XQOl5Aov7QC+KyILROQ0EZnS80p7ZBESROMna4Blcl2QA6XkCi8JYBLw38D/A5a4r8XpDCpqgmj8ZA2wTK4LcqCUXOGlIdjzQIWq7g0mpP6FuR2AVQEZk35WBTQ4gx4QRkSWAXNV9Y10BedVmBOAMcaEVSoDwvwb8LyIrAX29ExU1Ut8COoe4GLgDVWdmOr6cl1tLdTUQGMjlJdDVRVUViY3TxiuZIwxwfByBXBWX9NV9YmUNy5yJtAB/MRLArArgP7V1sL8+RCLOa+2Nue1aNGhE3yieXraEpSWOhVEra3Oc4Tqav9O0EFswxjTW39XAF4eAjcAT6vqE+5J/xngFT+CUtXVQOCdymWjmhrnpF5S4gzEUlLivK+p8T5PEIO52IAxxoSHlwTwS3o3ADvgTguEiNwgIutEZN2uXbuC2mzkNDY6J/N4sZgz3es8QQzmYgPGGBMeXhLAkPgKIPffhekLqTdVvUtVp6rq1DFjxgS12cgpL3du58Rra3Ome50nDO0ZjDHB8ZIAdonIwQe+InIp8Gb6QjKDUVXlnMxbWpx2AC0tzvuqKu/zhKE9gzEmOF4SwI3AF0SkQUQagM8BN6Q3LJOsykrnYW5JCezc6fyNfwDsZZ6KCudhbGkpbN/u/PX74WwQ2zDGeJOwCujgjCIj3Pnbfdu4yM+Bs4GjgNeBBar6o/7mtyogY4xJXtLtAETkv4CfqWo3gKp2HPb5u4AyVf3LYINS1Y8Pdtmw8aO23Usdf6rLB9GaONX9CA0fDkailqvWstVk0kC3gN4GPCci94jIJ0XkoyJylYh8WUSeABbh/GrPeX70xd9To9/SAmVlzt/5853pfi0fxJgCqe5HaPhwMBL1X2/925tM6zcBqOp3gSnAz4ExwLnu+0bgSlW9XFVfCiTKkPOjtt1LHX+qyyeKMwz7ERo+HIz4/uvzJI/SolJKh5VS93ydp8+NSbcBu4JQ1QPAo+7L9MOPvvgbG51fzPEOr+NPdfkgxhRIdT9Cw4eDkaj/euvf3mSalyogk4Afte1e6vhTXT6IMQVS3Y/Q8OFgJOq/3vq3N5lmCcAHftS2e6njT3X5IMYUSHU/QsOHg5Go/3rr395kmucy0DAIcxloGKpnrArIZ1YFZLJEKuMBDAUuB44j7pmBqn7Z5xgTCnMCMMaYsEplPIDlQCuwnrjxAEz4ePnBan3xh0v96lrqVtbQ0NHIuBHlzDynioozg79cqt1SS83aGhrbGykfWU7VtCoqJ0Txss0kw8sVwOawDNZiVwD989LPvvXFHy71q2tZvHw+pYUxRhXGaN3bRvPeNqovXRRoEqjdUsv8FfOJFcaIDY3RtqeNtr1tLJqxyJJAlkhlPICnRGRSGmIyPvJStm598YdL3coaSgtjlA4tcdoBDC2htDBG3cpgG03UrK0hVhijpKiEvLw8SopKiBXGqFkbtcYbJlkDdQWxCVB3nmtE5B84t4AEUFW134wh4qVs3Y86f+Ofho5Gxhb3bjQxqjBGQ0ewjSYa2xspOyyO2NAYje1Ra7xhkjXQM4CLA4vCpGzcOOd2TmnpoWmHl617mccEZ9yIcpr3tFA6tOTgtNa9bYwbEWyjifKR5bR0tVBSdCiOtj1tlI+MWuMNk6yBuoJ4RVVfAb7a8+/4acGFaLzwUrZuffGHy8xzqmje20bznhanHcCeFpr3tjHznGAbTVRNq6JtbxstXS10d3fT0tVC2942qqZFrfGGSZaXZwAT4t+ISD5wcnrCMYPlpZ9964s/XCrOrKT60kWUDi1he+dOSoeWBP4AGKByQiWLZiyipKiEnZ07KSkqsQfAOaLfKiARuRn4AlAE/KtnMrAXuEtVbw4kwjhWBWSMMclLuh2Aqn4D+IaIfCMTJ/sg+VEbn2gdQbSOtRr/JEXkgCVqKxBEa2Iv20g4TwAtq01y+r0FJCJTRGQK8Muef8e/AowxrfzoAz/ROoLoI9+P/cgpETlgPW0Fmve0MLa4jOY9LSxePp/61c6XJ4gxBbxsI+E8AYyvYJI30DOAJe7rDuBp4C7gh+6//zf9oQXDj9r4ROsIoo98q/FPUkQOWKK2AkGMKeBlGwnnCWB8BZO8gaqAPqiqHwReAaao6lRVPRmYDLwcVIDp1tDg1MLHS7Y2PtE6GhudE348v/vI92M/ckpEDlhDRyOjCnt/eeLbCjS0NjBqWO/98HtMAS/bSDiPD8c7iH3NNV6qgMar6qaeN6q6GTgpfSEFy48+8BOtI4g+8v3Yj5wSkQM2bkQ5rXt7f3ni2woEMaaAl20knCeA8RVM8rwkgK0icreInC0iZ4nID4Gt6Q4sKH7UxidaRxB95FuNf5IicsAStRUIYkwBL9tIOE8A4yuY5HnpDG4Y8D/Ame6k1cCdqro7zbEdIV1loFYFlKMicsCsCii5OMyRBj0eQJhYOwBjjEle0u0AROQXqvrRuE7herHO4HrLlqsIEz6B/MK/fwl1jy2l4UAT4/JHM/PcuVRcOS+pddT+fgk1a5fSuK+J8oLRVE2bS+VFya3DBGuglsBlqrpTRI7t63O3T6BAhfUKwI9+9hOto6ctQSzmvNranNeiRZYEsllP7XvpsFJGDRtF6+5Wmnc3U31atW9JoP7+JSx+ZAGlFDEqr4jW7i6a6aL6/C95TgK1v1/C/KcWEMsrIpZfRNuBLtq6u1h0+pcsCYRA0uMBqOpO95/nAoV9dAhnXNnSlsCETyB1/o8tpZQiSvOLnW3kF1NKEXWPLfW8jpq1S4nlFVGSX0weeZTkFxPLK6Jmrfd1mOB5qQI6DviBiPxdRH4hInNFxJcyUBG5UEReEJGXReTzfqwzE7KlLYEJn0Dq/A80MSqvqPc28opoONDkeR2N+5qI5fdeRyy/iMZ93tdhgpcwAajqbap6DjAR+AvwWZzxgVPi9ip6B/AfwAnAx0XkhFTXmwnZ0pbAhE8gdf75o2nt7uq9je4uxuWP9ryO8oLRtB3ovY62A12UF3hfhwlewgQgIreKyB+BR4B3A9XA2IGX8uQU4GVV/Yeq7gUeBC71Yb2By5a2BCZ8AqnzP3cuzXTRfKDT2caBTprpYua5cz2vo2raXNq6u2g50Ek33bQc6KStu4uqad7XYYLn5RbQTOBtwAqgDvhN3POBVJQDr8a93+5Oixw/+tlPtI7KSueBb0kJ7Nzp/LUHwNmv4ugKqk+rprSolO1t2yktKvX1ATBAxZXzqD7/S5TmF7O9u4XS/OKkHgADVF40j0Wnf4mS/GJ27muhJL/YHgBHgKd2ACIyEjjDfX0UeF1Vz0hpwyKzgAtU9Xr3/ZXAKao697D5bgBuABg3btzJr7xiz5+NMSYZSbcDiFtwIvAB4CxgKs6v9j/7ENN24B1x78cCOw6fSVXvwumJlKlTpw6q1Vqi+vqwNAhNVOcflf3wJZBUD4aXMH1oYZtoHUFY8uQSlq5dSlNXE6OLRjN32lzmvT/ul7eHY5U1rY0DEJU4vfByC+ibwEicLqDf5/YSepsP214LvEdE3ikihcBs4Dc+rLeXRN2Qh6Vb+ERjBkRlP3wJJNWD4SVMH/rZT7SOICx5cgkLnlhA555OSoaW0LmnkwVPLGDJk0vcIBMfq6wZcyAAUYnTKy9VQBep6iJVfUpV9/m1YVXdD1QBf8LpXO4XqrrFr/X3SFRfH5Zu4RPV+UdlP3wJJNWD4SVMH/rZT7SOICxdu5Si/CKKhxaTl5dH8dBiivKLWNpTf+/hWGXNmAMBiEqcXnm5AkgbVf2Dqh6vqu9S1SE+1RsAABG8SURBVK+lYxuJ6uvD0i18ojr/qOyHL4GkejC8hOlDP/uJ1hGEpq4migp6198XFRTR1OXW33s4Vlkz5kAAohKnVxlNAEFIVF8flm7hE9X5R2U/fAkk1YPhJUwf+tlPtI4gjC4aTde+3vX3Xfu6GF3k1t97OFZZM+ZAAKISp1dZnwAS1deHpVv4RHX+UdkPXwJJ9WB4CdOHfvYTrSMIc6fNpetAF517Ounu7qZzTyddB7qY21N/7+FYZc2YAwGISpxeDdQZ3G/poxfQHqp6SbqC6s9gO4OLSvWMVQHFsSogz6wKyKqAEkl6PAAROWugFarqEz7F5llYewM1xpgwS7odQCZO8JkSml/O5pAwXO542UaKcXr6pZjqvubQFzxsv7zDzktfQO8RkVoR+ZuI/KPnFURwQQhN/bw5JAyNHrxsI8U4PdWLp7qvOfQFj1L9fVh4eQj8Y+BOYD/wQeAnwP3pDCpIoamfN4eEodGDl22kGKenevFU9zWHvuBRqr8PCy8JoEhVH8N5XvCKqi4EzklvWMEJTf28OSQMjR68bCPFOD3Vi6e6rzn0BY9S/X1YeEkAu0UkD3hJRKpE5DLg7WmOKzChqZ83h4Sh0YOXbaQYp6d68VT3NYe+4FGqvw8LLwng08Bw4FPAycCVwNXpDCpIoamfN4eEodGDl22kGKenevFU9zWHvuBRqr8PC0/dQQOISAxQVW1Pb0j9S1cZaA4VSUSHVQH5t6859AW3KqC+Jd0OIG7BqTgPgke6k1qBa1U15WEhk2XtAIwxJnmDHg8AuAe4SVX/7K7oDJyEYGnVpE3CX3IJWgoH9kswxTi8xFm7pZaatTU0tjdSPrKcqmlVVE7wt1V0QllyFRHU9yIqVyJengG095z8AVT1L0DGbgOZ7JewnjvBeAGB1YOnGIeXOGu31DJ/xXxaulooKy6jpauF+SvmU7vFv7EREsqStgRBfS+i1B7BSwJ4RkR+ICJni8hZIvI9YJWITBGRKekO0OSehPXcCcYLCKwePMU4vMRZs7aGWGGMkqIS8vLyKCkqIVYYo2atf2MjJJQlbQmC+l5EqT2Cl1tAJ7l/Fxw2/XSczuKypk2ACYeG1gbGxsb2mtarnrux0fnFHS9uvICEy/slxTi8xNnY3khZce9txIbGaGyPGxthbO91pKVNRLq3EYCgvheBff984GVEsA8O8LKTv/FdwnruBOMFBFYPnmIcXuIsH1lO257e22jb00b5SP/GRkgoS9oSBPW9iFJ7BC99Af2biPxIRP7ovj9BRK5Lf2gmVyWs504wXkBg9eApxuElzqppVbTtbaOlq4Xu7m5aulpo29tG1TT/xkZIKEvaEgT1vYhSewQvZaB/xKn6uUVVTxSRIcBzqjopiADjWRlo7rAqoLhNWBWQb3K1CiiVdgBrVXWaiDynqpPdaRtU9aQBF0wDSwDGGJO8/hKAlyqgThF5G+7oYCIyHacxmDHGmAjzUgX0GeA3wLtE5ElgDBDsmHcmOGG51E8xjtq751Gz+Uc05nVS3l1M1cTrqLx+SaAxeNpEBIcXNNnDSxXQs8BZOGWfnwAmqGr4WjSY1IWlwU+KcdTePY/5W79Li+ymrLuIFtnN/K3fpfbueYkX9ikGT5vw0GAoSo2KTPR4qQKahTMmwBbgI8AyawCWpcLS4CfFOGo2/4hY9xBKdBh55FGiw4h1D6Fm848Ci8HTJjw0GIpSoyITPV6eAXxRVdvdPoAuAO7DGSHMZJuwDB6SYhyNeZ3EtLDXtJgW0pjXGVgMnjbhYQATG+TEpJOXBHDA/XsRcKeqLgcKB5jfRFVYGvykGEd5dzFtsrfXtDbZS3l3cWAxeNqEhwZDUWpUZKLHSwJoFJEfAB8F/iAiQz0uZ6ImLA1+UoyjauJ1tOXtp0V20003LbKbtrz9VE1Mov1iAMfCS4OhKDUqMtHjpR3AcOBCYJOqviQiZcAkVX1k0Bt1nissBN4HnKKqnor7rR1AAKwKyLcYPG3CqoBMAAbdECxNwbwP6AZ+AFRbAjDGmPRJZUAY36nqVgARycTmTab58cs6DENGYr/OTd+i8r0I/b18EblBRNaJyLpdu3ZlOhyTKj/q6xOtI6D2DFajb/oSpe9F2hKAiKwQkc19vC5NZj2qepeqTlXVqWPGjElXuCYoftTXJ1pHQO0ZrEbf9CVK34u03QJS1RnpWreJMD8GF0m0joAGMInSwB8mOFH6XoT+FpDJMn7U1ydaR0DtGaxG3/QlSt+LjCQAEblMRLYDpwG/F5E/ZSIOkwF+1NcnWkdA7RmsRt/0JUrfi4yUgQ6WlYFmCasCMlkubN+LULUDGCxLAMYYk7xQtQMwg+PLr4owtPT1EkOCecL2C2uw6lfXUreyhoaORsaNKGfmOVVUnBn8cBvZcjxNcuwhcET4Ulschv7+vcSQYJ4o1VkPpH51LYuXz6d5Twtji8to3tPC4uXzqV9dG2wcWXI8TfIsAUSEL7XFYejv30sMCeaJUp31QOpW1lBaGKN0aImzH0NLKC2MUbeyJtg4suR4muRZAogIX/qFD0N//15iSDBPtvSR39DRyKjCWK9powpjNHQ0BhtHlhxPkzxLABHhS21xGPr79xJDgnmiVGc9kHEjymnd29ZrWuveNsaNKA82jiw5niZ5lgAiwpfa4jD09+8lhgTzRKnOeiAzz6mieW8bzXtanP3Y00Lz3jZmnlMVbBxZcjxN8qwMNEKsCsiqgNIWR5YcT9M3awdgjDE5ytoBZIMw/Hr3Q20t1NRAYyOUl0NVFVQG/6vXmFxnzwCiIgw1/H6orYX586GlBcrKnL/z5zvTjTGBsgQQFWGo4fdDTQ3EYlBS4uxHSYnzvibY2ndjjCWA6AhDDb8fGhudE368WMyZbowJlCWAqAhDDb8fysuhrXftO21tznRjTKAsAURFGGr4/VBV5ZzwW1qc/Whpcd5XBVv7boyxBBAdFRVQXe3c99++3flbXR29KqDKSli0yLn3v3On83fRIqsCMiYDrB2AMcZkOWsHkKJIlOBHIkiiE2cQ7FiYDLJbQB5EogQ/EkESnTiDYMfCZJglAA8iUYIfiSCJTpxBsGNhMswSgAeRKMGPRJBEJ84g2LEwGWYJwINIlOBHIkiiE2cQ7FiYDLME4EEkSvAjESTRiTMIdixMhlkZqEeRKNaIRJBEJ84g2LEwAbDxAIwxJkdZOwBjkuTLaF32C9+EWEaeAYjI7SLyvIjUi8hDIlKSiTiM6U/96loWL59P854WxhaX0bynhcXL51O/OolxC6zO34Rcph4CPwpMVNUK4EXg5gzFYUyf6lbWUFoYo3RoCXmSR+nQEkoLY9StTGLcAqvzNyGXkQSgqo+o6n737V+BsZmIw5j+NHQ0Mqqw97gFowpjNHQkMW6B1fmbkAtDGei1wB/7+1BEbhCRdSKybteuXQGGZXLZuBHltO7tPW5B6942xo1IYtwCq/M3IZe2BCAiK0Rkcx+vS+PmuQXYDzzQ33pU9S5VnaqqU8eMGZOucI3pZeY5VTTvbaN5Twvd2k3znhaa97Yx85wkxi2wOn8TchkrAxWRq4EbgXNV9V9elrEyUBMkqwIy2SJU7QBE5ELgW8BZqur5vo4lAGOMSV5/CSBTzwBqgJHAoyKyQUS+n6E4jDEmZ2WkIZiqvjsT2zXGGHNIGKqAjDHGZIAlAGOMyVGWAIwxJkdZAjDGmBxlCcAYY3KUJQBjjMlRNh5ANrFWp8aYJNgVQLawvueNMUmyBJAtrO95Y0ySLAFkC+t73hiTJEsA2cL6njfGJMkSQLawvueNMUmyBJAtKiqgutq57799u/O3utqqgIwx/bIy0GxSUWEnfGOMZ3YFYIwxOcoSgDHG5ChLAMYYk6MsARhjTI6yBGCMMTnKEoAxxuQoSwDGGJOjLAEYY0yOElXNdAyeicgu4JV+Pj4KeDPAcKLAjsmR7JgcyY7JkbLtmByrqmMOnxipBDAQEVmnqlMzHUeY2DE5kh2TI9kxOVKuHBO7BWSMMTnKEoAxxuSobEoAd2U6gBCyY3IkOyZHsmNypJw4JlnzDMAYY0xysukKwBhjTBIsARhjTI7KqgQgIreLyPMiUi8iD4lISaZjyjQRmSUiW0SkW0SyvqxtICJyoYi8ICIvi8jnMx1PponIPSLyhohsznQsYSEi7xCRx0Vkq/v/5v9kOqZ0yqoEADwKTFTVCuBF4OYMxxMGm4GZwOpMB5JJIpIP3AH8B3AC8HEROSGzUWXcvcCFmQ4iZPYD81T1fcB04JPZ/D3JqgSgqo+o6n737V+BsZmMJwxUdauqvpDpOELgFOBlVf2Hqu4FHgQuzXBMGaWqq4GmTMcRJqq6U1Wfdf/dDmwFyjMbVfpkVQI4zLXAHzMdhAmNcuDVuPfbyeL/2CZ1InIcMBl4OrORpE/kBoUXkRXA0X18dIuqLnfnuQXnUu6BIGPLFC/HxCB9TLMaaNMnERkB/Ar4tKq2ZTqedIlcAlDVGQN9LiJXAxcD52qONHJIdEwM4Pzif0fc+7HAjgzFYkJMRApwTv4PqGpdpuNJp6y6BSQiFwKfAy5R1X9lOh4TKmuB94jIO0WkEJgN/CbDMZmQEREBfgRsVdVvZTqedMuqBADUACOBR0Vkg4h8P9MBZZqIXCYi24HTgN+LyJ8yHVMmuMUBVcCfcB7s/UJVt2Q2qswSkZ8Da4D3ish2Ebku0zGFwPuBK4Fz3HPIBhH5UKaDShfrCsIYY3JUtl0BGGOM8cgSgDHG5ChLAMYYk6MsARhjTI6yBGCMMTnKEoDJSSJytoj8zut0H7b3kfhOxURklZfeWUWkzI94RGSMiDyc6npMdrEEYEwwPoLTC2myPgP8MNWNq+ouYKeIvD/VdZnsYQnAhJKIFIvI70Vko4hsFpGPudNPFpEnRGS9iPxJRMrc6atE5Dsi8pQ7/ynu9FPcac+5f9+bZAz3iMhad/lL3elzRKRORB4WkZdEZFHcMteJyItuPD8UkRoROR24BLjdbVj0Lnf2WSLyjDv/B/oJ43LgYXfd+SKyWEQ2uWNezHWnbxORr4vIGhFZJyJT3GPzdxG5MW5dvwau8Lr/JvtFri8gkzMuBHao6kUAIjLK7aNlKXCpqu5yk8LXcHp+BShW1dNF5EzgHmAi8DxwpqruF5EZwNdxTqpe3AKsVNVr3cGFnnE73gM4CaenyD3ACyKyFDgAfBGYArQDK4GNqvqUiPwG+J2q1rr7AzBEVU9xW5ouAHr16SQi7wSaVXWPO+kG4J3AZHd/RsfN/qqqniYi38bp5//9wDBgC9DTIn4d8FWP+25ygCUAE1abgMUi8k2cE+efRWQizkn9UfcEmg/sjFvm5+D0cy8iMfekPRK4T0Teg9P7Z0ESMZwPXCIi1e77YcA499+PqWorgIj8DTgWOAp4QlWb3Om/BI4fYP09HY2tB47r4/MyYFfc+xnA93vGvOjZjqunX6NNwAi3L/t2EdktIiWq2gK8ARwz8C6bXGIJwISSqr4oIicDHwK+ISKPAA8BW1T1tP4W6+P9V4DHVfUyt3/3VUmEIcDlhw+oIyKn4vzy73EA5/9SX11OD6RnHT3LH64LJ+nEx9Nf3y096+o+LLbuuHUPc9dpDGDPAExIicgxwL9U9afAYpzbKi8AY0TkNHeeAhGZELdYz3OCM4BW9xf6KKDR/XxOkmH8CZjr9hCJiExOMP8zwFkiUioiQ+h9q6kd52okGS/S+8rgEeBGd90cdgvIi+Nxhgg1BrAEYMJrEs499w049+K/6g7lWAl8U0Q2AhuA0+OWaRaRp3Dueff0bLkI5wriSZxbRsn4Cs4to3pxBk7/ykAzq2ojzjOGp4EVwN+AVvfjB4HPug+T39XPKg5fXyfwdxF5tzvpbqDBjWcj8J9J7s8Hgd8nuYzJYtYbqMkKIrIKqFbVdRmOY4Sqdri/0h8C7lHVh1JY32XAyap6qw+xrcZ5gN6c6rpMdrArAGP8tdC9atkM/BOn9HLQ3OSxLdWgRGQM8C07+Zt4dgVgjDE5yq4AjDEmR1kCMMaYHGUJwBhjcpQlAGOMyVGWAIwxJkf9fy2Rtfz06Z7OAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot scaled data\n",
    "plot(X_scaled, iris_y, \"Iris: Data Scaled\", \"sepal length (cm)\", \"sepal width (cm)\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,\n",
       "    svd_solver='auto', tol=0.0, whiten=False)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fit our 2-dimensional PCA on our scaled data\n",
    "pca.fit(X_scaled)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.52106591, -0.26934744,  0.5804131 ,  0.56485654],\n",
       "       [ 0.37741762,  0.92329566,  0.02449161,  0.06694199]])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# different components as cenetered data\n",
    "pca.components_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2.26470281,  0.4800266 ],\n",
       "       [-2.08096115, -0.67413356],\n",
       "       [-2.36422905, -0.34190802],\n",
       "       [-2.29938422, -0.59739451],\n",
       "       [-2.38984217,  0.64683538]])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# different projection when data are scaled\n",
    "pca.transform(X_scaled)[:5,]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.72962445, 0.22850762])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# percentage of variance in data explained by each component\n",
    "pca.explained_variance_ratio_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot PCA projection of scaled data\n",
    "plot(pca.transform(X_scaled), iris_y, \"Iris: Data projected onto first two PCA components\", \"PCA1\", \"PCA2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.52106591, -0.26934744,  0.5804131 ,  0.56485654],\n",
       "       [ 0.37741762,  0.92329566,  0.02449161,  0.06694199]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# how to interpret and use components\n",
    "pca.components_  # a 2 x 4 matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "first_scaled_flower = X_scaled[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2.26470281,  0.4800266 ],\n",
       "       [-2.08096115, -0.67413356],\n",
       "       [-2.36422905, -0.34190802],\n",
       "       [-2.29938422, -0.59739451],\n",
       "       [-2.38984217,  0.64683538]])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Multiply original matrix (150 x 4) by components transposed (4 x 2) to get new columns (150 x 2)\n",
    "np.dot(X_scaled, pca.components_.T)[:5,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-2.2647028088075896, 0.480026596520987)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# extract the first row of our scaled data\n",
    "first_scaled_flower = X_scaled[0]\n",
    "# extract the two PC's\n",
    "first_Pc = pca.components_[0]\n",
    "second_Pc = pca.components_[1]\n",
    "\n",
    "first_scaled_flower.shape  # (4,)\n",
    "\n",
    "# same result as the first row of our matrix multiplication\n",
    "np.dot(first_scaled_flower, first_Pc), np.dot(first_scaled_flower, second_Pc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-2.26470281,  0.4800266 ],\n",
       "       [-2.08096115, -0.67413356],\n",
       "       [-2.36422905, -0.34190802],\n",
       "       [-2.29938422, -0.59739451],\n",
       "       [-2.38984217,  0.64683538]])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# This is how the transform method works in pca\n",
    "pca.transform(X_scaled)[:5,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# cut out last two columns of the original iris dataset\n",
    "iris_2_dim = iris_X[:,2:4]\n",
    "\n",
    "# center the data\n",
    "iris_2_dim = iris_2_dim - iris_2_dim.mean(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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8/je977H3Llzueiii5g1axbr1q3jpptuor6+noyMDFatWkV6ejrf/va3KSkpIS0tjV/+8pece+65PjH+ffPfefC/H2T/nv2ku9L51h3f4hvnf4MHlzxIeXk5H3/8McOGDePpp5+O6N/WLj0ZY6LCu+AuRVLIy8yjor6C/fX7fdr21++nor6i1355rjxWvLciqGN7Lz6U/d5Ojn3sT7jqGtmfl473POPBLnDUtd+XZnyJNS+v6ey3fPly8vPz+eCDD1i7di0bN25k/fr1vPnmm4Aza+yVV17JO++8w4EDBygrK2PLli1s3ryZq6++2udYzc3NXHbZZdx3331s2rSJlStXkpmZyQMPPAA404c888wzXHXVVT6TBG47sI3i/y1m/MnjeeTlR7hu0XUsvXlpZ4zr16/nT3/6U8RJAixRGGOixF/BXVNbk9+6h6a2pl77hVKs57340LC//5PWnGzIzaWxvRny8pzHihV+Fylypbn81n949zt2wrHUVtby0a6P2LRpE3l5eZSWlvLKK68wceJETj31VN577z0++OADAMaOHcuUKVMAOOqoo9i5cycLFizg5Zdfxu32rfl4//33KSgo4PTTTwfA7XaTlpbGW2+9xRVXXAE4kwuOHTuW7du3+8S4bcM2pl3iTHV+6lmncrDmIOUVzup6F198MZmZmUH9/npjicIYExX+Cu465mTyaUvLICM1o9d+oRTreS8+5CrbR+uQLFrbWw//sffMM+5vkaLG1ka/FeVd+511wVlsWLWBZcuWMWfOHFSVm2++uXOq8R07dnCNZ+bBrKyszu3y8vLYtGkT55xzDg888ADXXnutz35VFRHp9pl6m4cvx5VDe3t7t206Pot3DJGyRGGMiQp/BXf5WfkMzxru0zY8azj5Wfm99gulWO+EYSfQ2NpIQ0sDjSOHozU1tLa3MmzwMKeDZ55x736q6vRvbeSEYSf0uL+OflMumMLbL79NcXExs2bN4oILLuDRRx+lrq4OgLKyMvbv398ttgMHDtDe3s6ll17KXXfdxYYNG3zeHz9+POXl5axbtw6AgwcP0trayhe/+EWeeuopALZv386uXbs4/vjjfWIcf9p4/rbib6gq/37r3wzJHcKkcX7n9YuI3cw2xkRFR8Gd98ileybeA/iOZrp74t3d2vz1u2biNUGPeupYfGjbgW189J+ncuITf2V4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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(iris_2_dim, iris_y, \"Iris: Only 2 dimensions\", \"sepal length\", \"sepal width\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "# instantiate a PCA of 2 components\n",
    "twodim_pca = PCA(n_components=2)\n",
    "\n",
    "# fit and transform our truncated iris data\n",
    "iris_2_dim_transformed = twodim_pca.fit_transform(iris_2_dim)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(iris_2_dim_transformed, iris_y, \"Iris: PCA performed on only 2 dimensions\", \"PCA1\", \"PCA2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(-1, 1),\n",
       " Text(0, 0.5, 'component 2'),\n",
       " (-3, 3),\n",
       " Text(0.5, 0, 'component 1'),\n",
       " Text(0.5, 1.0, 'Projected Data')]"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# This code is graphing both the original iris data and the projected version of it using PCA.\n",
    "# Moreover, on each graph, the principal components are graphed as vectors on the data themselves\n",
    "# The longer of the arrows is meant to describe the first principal component and\n",
    "# the shorter of the arrows describes the second principal component\n",
    "def draw_vector(v0, v1, ax):\n",
    "    arrowprops=dict(arrowstyle='->',linewidth=2,\n",
    "                    shrinkA=0, shrinkB=0)\n",
    "    ax.annotate('', v1, v0, arrowprops=arrowprops)\n",
    "    \n",
    "fig, ax = plt.subplots(2, 1, figsize=(10, 10))\n",
    "fig.subplots_adjust(left=0.0625, right=0.95, wspace=0.1)\n",
    "\n",
    "# plot data\n",
    "ax[0].scatter(iris_2_dim[:, 0], iris_2_dim[:, 1], alpha=0.2)\n",
    "for length, vector in zip(twodim_pca.explained_variance_, twodim_pca.components_):\n",
    "    v = vector * np.sqrt(length)  # elongdate vector to match up to explained_variance\n",
    "    draw_vector(twodim_pca.mean_, \n",
    "                twodim_pca.mean_ + v, ax=ax[0])\n",
    "ax[0].set(xlabel='x', ylabel='y', title='Original Iris Dataset',\n",
    "         xlim=(-3, 3), ylim=(-2, 2))\n",
    "\n",
    "\n",
    "ax[1].scatter(iris_2_dim_transformed[:, 0], iris_2_dim_transformed[:, 1], alpha=0.2)\n",
    "for length, vector in zip(twodim_pca.explained_variance_, twodim_pca.components_):\n",
    "    transformed_component = twodim_pca.transform([vector])[0]  # transform components to new coordinate system\n",
    "    v = transformed_component * np.sqrt(length)  # elongdate vector to match up to explained_variance\n",
    "    draw_vector(iris_2_dim_transformed.mean(axis=0),\n",
    "                iris_2_dim_transformed.mean(axis=0) + v, ax=ax[1])\n",
    "ax[1].set(xlabel='component 1', ylabel='component 2',\n",
    "          title='Projected Data',\n",
    "          xlim=(-3, 3), ylim=(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 线性判别分析LDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "setosa [5.006 3.428 1.462 0.246]\n",
      "versicolor [5.936 2.77  4.26  1.326]\n",
      "virginica [6.588 2.974 5.552 2.026]\n"
     ]
    }
   ],
   "source": [
    "# calculate the mean for each class\n",
    "# to do this we will separate the iris dataset into three dataframes\n",
    "# one for each flower, then we will take one's mean columnwise\n",
    "mean_vectors = []\n",
    "for cl in [0, 1, 2]:\n",
    "    class_mean_vector = np.mean(iris_X[iris_y==cl], axis=0)\n",
    "    mean_vectors.append(class_mean_vector)\n",
    "    print(label_dict[cl], class_mean_vector)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[38.9562, 13.63  , 24.6246,  5.645 ],\n",
       "       [13.63  , 16.962 ,  8.1208,  4.8084],\n",
       "       [24.6246,  8.1208, 27.2226,  6.2718],\n",
       "       [ 5.645 ,  4.8084,  6.2718,  6.1566]])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculate within-class scatter matrix\n",
    "S_W = np.zeros((4,4))\n",
    "# for each flower\n",
    "for cl,mv in zip([0, 1, 2], mean_vectors):\n",
    "    # scatter matrix for every class, starts with all 0's\n",
    "    class_sc_mat = np.zeros((4,4))  \n",
    "    # for each row that describes the specific flower\n",
    "    for row in iris_X[iris_y == cl]:\n",
    "        # make column vectors \n",
    "        row, mv = row.reshape(4,1), mv.reshape(4,1) \n",
    "        # this is a 4x4 matrix\n",
    "        class_sc_mat += (row-mv).dot((row-mv).T)\n",
    "    # sum class scatter matrices\n",
    "    S_W += class_sc_mat          \n",
    "    \n",
    "S_W"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 63.21213333, -19.95266667, 165.2484    ,  71.27933333],\n",
       "       [-19.95266667,  11.34493333, -57.2396    , -22.93266667],\n",
       "       [165.2484    , -57.2396    , 437.1028    , 186.774     ],\n",
       "       [ 71.27933333, -22.93266667, 186.774     ,  80.41333333]])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# calculate the between-class scatter matrix\n",
    "\n",
    "# mean of entire dataset\n",
    "overall_mean = np.mean(iris_X, axis=0).reshape(4,1)\n",
    "\n",
    "# will eventually become between class scatter matrix\n",
    "S_B = np.zeros((4,4))\n",
    "for i,mean_vec in enumerate(mean_vectors):  \n",
    "    # number of flowers in each species\n",
    "    n = iris_X[iris_y==i,:].shape[0]\n",
    "    # make column vector for each specied\n",
    "    mean_vec = mean_vec.reshape(4,1)\n",
    "    S_B += n * (mean_vec - overall_mean).dot((mean_vec - overall_mean).T)\n",
    "\n",
    "S_B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Eigenvector 1: [ 0.20874182  0.38620369 -0.55401172 -0.7073504 ]\n",
      "Eigenvalue 1: 32.19192919827801\n",
      "\n",
      "Eigenvector 2: [-0.00653196 -0.58661055  0.25256154 -0.76945309]\n",
      "Eigenvalue 2: 0.2853910426230734\n",
      "\n",
      "Eigenvector 3: [ 0.88493633 -0.28315325 -0.25879109 -0.26408162]\n",
      "Eigenvalue 3: 3.122123344961963e-16\n",
      "\n",
      "Eigenvector 4: [-0.58376426  0.44506636  0.48295873 -0.47737417]\n",
      "Eigenvalue 4: -6.506451270892598e-15\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# calculate eigenvalues and eigenvectors of S−1W x SB\n",
    "eig_vals, eig_vecs = np.linalg.eig(np.dot(np.linalg.inv(S_W), S_B))\n",
    "eig_vecs = eig_vecs.real\n",
    "eig_vals = eig_vals.real\n",
    "\n",
    "for i in range(len(eig_vals)):\n",
    "    eigvec_sc = eig_vecs[:,i]\n",
    "    print('Eigenvector {}: {}'.format(i+1, eigvec_sc))\n",
    "    print('Eigenvalue {:}: {}'.format(i+1, eig_vals[i]))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.20874182,  0.38620369, -0.55401172, -0.7073504 ],\n",
       "       [-0.00653196, -0.58661055,  0.25256154, -0.76945309]])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# keep the top two linear discriminants\n",
    "linear_discriminants = eig_vecs.T[:2]\n",
    "\n",
    "linear_discriminants"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 9.91212605e-01,  8.78739503e-03,  9.61324186e-18, -2.00338304e-16])"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#explained variance ratios\n",
    "eig_vals / eig_vals.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.49920971, -1.88675441],\n",
       "       [ 1.2643595 , -1.59214275],\n",
       "       [ 1.35525305, -1.73341462],\n",
       "       [ 1.18495616, -1.62358806],\n",
       "       [ 1.5169559 , -1.94476227]])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# LDA projected data\n",
    "\n",
    "lda_iris_projection = np.dot(iris_X, linear_discriminants.T)\n",
    "\n",
    "lda_iris_projection[:5,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(lda_iris_projection, iris_y, \"LDA Projection\", \"LDA1\", \"LDA2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# instantiate the LDA module\n",
    "lda = LinearDiscriminantAnalysis(n_components=2)\n",
    "\n",
    "# fit and transform our original iris data\n",
    "X_lda_iris = lda.fit_transform(iris_X, iris_y)\n",
    "\n",
    "# plot the projected data\n",
    "plot(X_lda_iris, iris_y, \"LDA Projection\", \"LDA1\", \"LDA2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-3.97322221 -3.97322221 -3.97322221 -3.97322221]\n",
      "[-3.68987776 -3.68987776 -3.68987776 -3.68987776]\n"
     ]
    }
   ],
   "source": [
    "# show that the sklearn components are just a scalar multiplication from the manual components we calculateda\n",
    "for manual_component, sklearn_component in zip(eig_vecs.T[:2], lda.scalings_.T):\n",
    "    print(sklearn_component / manual_component)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.9912126, 0.0087874])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# same as manual calculations\n",
    "lda.explained_variance_ratio_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.82937764,  0.02410215],\n",
       "       [-1.53447307,  2.16452123],\n",
       "       [ 2.20121166, -0.93192121],\n",
       "       [ 2.81046031,  2.83918785]])"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# essentially the same as pca.components_, but transposed (4x2 instead of 2x4)\n",
    "lda.scalings_  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "# fit our LDA to scaled data\n",
    "X_lda_iris = lda.fit_transform(X_scaled, iris_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.68448644,  0.01989153],\n",
       "       [-0.66659193,  0.94029176],\n",
       "       [ 3.87282074, -1.63962597],\n",
       "       [ 2.13508598,  2.15691008]])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lda.scalings_  # different scalings when data are scaled"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
